/**
 * 文 件 名:  DebugUtil.java
 * 版    权:  Kedou
 * 描    述:   打印日志工具类
 * 修 改 人:  周朝
 * 修改时间:  2014-07-03
 */
package com.kedou.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

import android.text.TextUtils;
import android.util.Log;

import com.kedou.app.Config;
import com.kedou.application.Myapplication;

/**
 * 打印日志工具类
 */
public class DebugUtil {

	/**
	 * logContent.replace("\"{", "{").replace("}\"", "}").replace("\\", "")
	 * 是否打印日志
	 */
	public static final boolean isEnableDebug = Config.IS_DEBUG;

	public static void syso(String content) {
		if (isEnableDebug) {
			String log = getTraceInfo() + "  :  " + content;
			System.out.println(log);
		}
	}

	public static void printI(String tag, String content) {
		if (isEnableDebug) {
			String log = getTraceInfo() + "  :  " + content;
			Log.i(tag, log);
		}
	}

	public static void printE(String tag, String content) {
		if (isEnableDebug) {
			String log = getTraceInfo() + "  :  " + content;
			Log.e(tag, log);
		}
	}

	public static void printD(String tag, String content) {
		if (isEnableDebug) {
			String log = getTraceInfo() + "  :  " + content;
			Log.d(tag, log);
		}
	}

	public static void printV(String tag, String content) {
		if (isEnableDebug) {
			String log = getTraceInfo() + "  :  " + content;
			Log.v(tag, log);
		}
	}

	/**
	 * 获取堆栈信息
	 */
	private static String getTraceInfo() {
		StringBuffer sb = new StringBuffer();
		StackTraceElement[] stacks = new Throwable().getStackTrace();
		String className = stacks[2].getClassName();
		int index = className.lastIndexOf('.');
		if (index >= 0) {
			className = className.substring(index + 1, className.length());
		}
		String methodName = stacks[2].getMethodName();
		int lineNumber = stacks[2].getLineNumber();
		sb.append(className).append("->").append(methodName).append("()->")
				.append(lineNumber);
		return sb.toString();
	}

	/**
	 * 将相关日志信息写入本地文件，已解决log日志打印大字符串不完整的问题。 仅仅在debug可用的情况下写入。
	 * 如果文件已存在，则将文件删除在写入。相当于直接覆盖。
	 * 
	 * @param log
	 *            要写的log
	 * @param name
	 *            文件名
	 */
	public static void writeLogToText(String log, String name) {
		writeLogToTextBySuffix(name, log, "xml");
	}

	/**
	 * 保存日志到文本中
	 * 
	 * @param name
	 *            文件名
	 * @param log
	 */
	public static void writeLogToTxt(String name, String log) {
		writeLogToTextBySuffix(name, log, "txt");
	}

	/**
	 * @param name
	 *            文件名称
	 * @param log
	 *            log 内容
	 * @param suffix
	 *            文件后缀
	 */
	public static void writeLogToTextBySuffix(String name, String log,
			String suffix) {
		if (DebugUtil.isEnableDebug) {
			if (TextUtils.isEmpty(suffix)) {
				suffix = "txt";
			}
			if (TextUtils.isEmpty(log)) {
				return;
			}
			if (TextUtils.isEmpty(name)) {
				name = "log日志未命名";
			}
			try {
				FileWriter fw;
				final String filename = Myapplication.DEBUG_PATH + name + "."
						+ suffix;
				File logFile = new File(filename);
				if (logFile != null && logFile.exists()) {
					logFile.delete();
				}
				fw = new FileWriter(filename, true);
				BufferedWriter bw = new BufferedWriter(fw);
				bw.write(log);
				bw.close();
				fw.close();
			} catch (Exception e) {
				DebugUtil.printE("randy " + "Debug.writeLogToTextBySuffix()",
						e.toString());
				e.printStackTrace();
			}
		}
	}
}
